import java.util.Arrays;

public class MyStack {
    public int[] elem;  // 用于存储栈元素的数组
    public int usedSize; // 记录当前栈中已使用的空间大小

    public MyStack() {
        elem = new int[10]; // 初始化栈，默认容量为10
    }

    // 方法一：push(int val) - 入栈操作
    // 功能：将元素压入栈顶。如果栈已满，会先自动扩容
    public void push(int val) {
        // 1. 如果满了进行扩容
        if(isFull()) {
            elem = Arrays.copyOf(elem,elem.length*2); // 数组扩容为原来的2倍
        }
        // 2. 将新元素放入栈顶
        elem[usedSize] = val;
        // 3. 更新已使用大小
        usedSize++;
    }

    // isFull() - 检查栈是否已满
    public boolean isFull() {
        return usedSize == elem.length; // 比较已用大小和数组长度
    }

    // 方法二：pop() - 出栈操作
    // 功能：移除并返回栈顶元素。如果栈为空返回-1。
    public int pop() {
        if(isEmpty()) {
            return -1; // 栈为空时返回-1表示错误
        }
        int oldVal = elem[usedSize-1]; // 获取栈顶元素
        usedSize--; // 减小已用大小（逻辑删除）
        return oldVal; // 返回栈顶元素
    }

    // isEmpty() - 检查栈是否为空
    public boolean isEmpty() {
        return usedSize == 0; // 检查已用大小是否为0
    }

    // 方法三：peek() - 查看栈顶元素
    // 功能：返回栈顶元素但不移除它。如果栈为空返回-1
    public int peek() {
        if(isEmpty()) {
            return -1; // 栈为空时返回-1表示错误
        }
        return elem[usedSize-1]; // 返回栈顶元素但不移除
    }

    // getUsedSize() - 获取栈大小
    // 功能：返回栈中当前存储的元素数量
    public int getUsedSize() {
        return usedSize; // 返回当前栈中元素数量
    }

}
